// pages/songDetail/songDetail.js
import PubSub, { publish } from 'pubsub-js'
import moment from 'moment'
import request from '../../../utils/request'
//获取全局实例
 const appInstance = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay:false, //标识音乐是否播放,
    musicId:'', //存储musicid
    song:{},
    musicLink:'', //判断是否为当前播放是否已经存在链接
    currentTime:'00:00', //实时
    durationTime:'00:00',  //总时长
    currentWidth:0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
   
    let musicId = options.musicId
    this.setData({
      musicId
    })
    this.getMusciInfo(musicId)

     // 一进来就判断是否有音乐在播放
     if(appInstance.globalData.isMusicPlay && appInstance.globalData.isMusicId === musicId) {
        this.setData({
          isPlay:true
        })
    }
    //创建音乐实例
     this.BackgroundAudioManager =  wx.getBackgroundAudioManager() 
    // 监听背景音频播放事件
    this.BackgroundAudioManager.onPlay(()=>{
      this.setMusicStatus(true)
      appInstance.globalData.isMusicId = musicId
    })
    // 监听背景音频暂停事件
    this.BackgroundAudioManager.onPause(()=>{
      this.setMusicStatus(false)
    })
    // 监听背景音频停止事件
    this.BackgroundAudioManager.onStop(()=>{
      this.setMusicStatus(false)
    })
    ////监听背景音频自然播放结束事件
    // this.BackgroundAudioManager.onEnded(()=>{
    //   console.log('进入这个');
    //   //切换到下一首,实时时长回到0
    //   PubSub.publish("switchType","next") 
    //   let {
    //     isPlay,
    //     musicId,
    //     musicLink
    //   } = this.data
    //   console.log(isPlay,musicId,musicLink);
    //   this.musicStatus(isPlay, musicId, musicLink)
    //   this.setData({
    //     currentWidth:0,
    //     currentTime:'00:00'//实时
    //   })
    // })
      // 监听音乐播放自然结束
      //上面的方法直接调用不可以
      this.BackgroundAudioManager.onEnded(()=> {
      console.log(musicId,73);
		// 自动切换到下一首音乐，并自动播放
		PubSub.publish('switchType','next'); //发布
    PubSub.subscribe('musicId', (msg,musicId)=>{ //订阅
      console.log(musicId,77);
			// 获取音乐的详情信息
			this.getMusciInfo(musicId);
			// 自动播放当前音乐
			this.musicStatus(true,musicId);
			//取消订阅
			PubSub.unsubscribe('musicId');
		});
		// 将实时的进度条的长度还原成0 时间还原成0
		this.setData({
			currentWidth: 0,
			currentTime: '00:00'
		})
	});
    // 监听音乐实时时长
    this.BackgroundAudioManager.onTimeUpdate(()=>{
      let currentTime = moment(this.BackgroundAudioManager.currentTime*1000).format("mm:ss")
      let currentWidth = this.BackgroundAudioManager.currentTime/this.BackgroundAudioManager.duration *450
      this.setData({
        currentTime,
        currentWidth
      })
    })
  },
  // 封装重复修改状态方法
  setMusicStatus(isPlay){
    this.setData({
      isPlay
    })
    appInstance.globalData.isMusicPlay = isPlay
  },
  // 封装音乐详情
  async getMusciInfo(musicId){
    let songData =await request('/song/detail',{ids:musicId})
    let durationTime = moment(songData.songs[0].dt).format("mm:ss")
    this.setData({
      song:songData.songs[0],
      durationTime
    })
    // 设置头部标题
    wx.setNavigationBarTitle({
      title:this.data.song.name
    })
  },
  // 点击播放暂停的回调
  handleMusicPlay(){
    // 取反
    let isPlay = !this.data.isPlay
    // 更新
    // this.setData({
    //   isPlay
    // })
    let {musicId, musicLink} = this.data;
    this.musicStatus(isPlay,musicId,musicLink)
  },
  //音乐播放暂停
  async musicStatus(isPlay,musicId,musicLink){
    
    if(isPlay){ //播放音乐
      if(!musicLink) {
        let musicUrl = await request('/song/url',{id:musicId})
        musicLink = musicUrl.data[0].url
        this.setData({
          musicLink
        })
      }
      this.BackgroundAudioManager.src = musicLink;
      this.BackgroundAudioManager.title = this.data.song.name
    }else { //暂停音乐
      this.BackgroundAudioManager.pause()
    }
  },
  // 切换上下首歌曲
  handleSwitch(event){
    let type = event.currentTarget.id
    //暂停本歌曲
    this.BackgroundAudioManager.stop()
    // 订阅来自songDetai的数据
    PubSub.subscribe('musicId',(msg,musicId)=>{
      // 根据musicId重新获取数据
      this.getMusciInfo(musicId)
      this.musicStatus(true,musicId)
      //取消订阅者接收的musicId消息
      PubSub.unsubscribe('musicId')
    }) 
    // 发布数据给recommendSong数据
    PubSub.publish('switchType',type)
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
 
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})